#include "head.h"

// 初始化进程池中进程
// list: 维护的记录池中进程的数组
// num: 要初始化的池中进程的个数
int initPool(proc_status_t *list, int num){
    
    for(int i=0; i<num; i++){
    
        int socket_local_fd[2];
        socketpair(AF_LOCAL, SOCK_STREAM, 0, socket_local_fd);

        // 创建子进程
        pid_t son_id = fork();

        if(son_id == 0){
            // 子进程逻辑
            // 持有本地socket的0端
            close(socket_local_fd[1]);

            // 调用子进程的工作函数
            sonProcMain(socket_local_fd[0]);
            
        }else{
            // 父进程逻辑
            list[i].pid = son_id;
            list[i].status = FREE;
            // 持有本地socket的1端
            close(socket_local_fd[0]);
            list[i].local_socket_fd = socket_local_fd[1];
        }
    }

    return 0;
}


// 选一个空闲状态的子进程, 接收net_fd
int toSon(int net_fd, proc_status_t *list, int num){

    for(int i=0; i<num; i++){

        if(list[i].status == FREE){
            // 通过和这个子进程所维护的本地socket-> 传net_fd
            localNetFdSend(net_fd, list[i].local_socket_fd);
            list[i].status = BUSY;

            break;
        }
    }

    // TODO: 有可能三个子进程都处于繁忙状态
    return 0;
}
